package com.tangkeyon.service.impl;

import com.google.common.collect.Lists;
import com.tangkeyon.service.IFileService;
import com.tangkeyon.util.FTPUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

/**@Description: 将上传的文件先暂存在本地然后上传到远程ftp服务器
 * @Author: tangkeyon@gmail.com
 * @Date: 2019/6/8 11:32
 * @Version 1.0
 * Note：
 * 上传文件分以下步骤：
 *    1.创建保存文件的文件夹
 *    2.为上传的文件进行重命名(获取上传文件的拓展名，生成UUID作为文件名)
 *    3.根据文件夹和文件名拼接出文件保存的完整路径
 *    3.IO写入文件
 */
@Service("IfileService")
public class IFileServiceImpl implements IFileService {
    @Override
    public String upload(String filePath, MultipartFile file) {
//        创建暂存文件夹路径
        File tempDirectory=new File(filePath);
        if(!tempDirectory.exists()){
            tempDirectory.setWritable(true);//赋予可以创建文件夹的权限
            tempDirectory.mkdirs();
        }
//        获取上传文件的拓展名
        String uploadFileName = file.getOriginalFilename();
        String extensionName = uploadFileName.substring(uploadFileName.lastIndexOf(".") + 1);
//        为上传文件重命名后保存在本地
        String fileRename = UUID.randomUUID() + "." + extensionName;
        File readyUploadFile=new File(tempDirectory,fileRename);
        try {
            file.transferTo(readyUploadFile);

//        将暂存在本地的文件上传到远程FTP服务器上
            FTPUtils.upload(Lists.newArrayList(readyUploadFile));
//        删除本地残存的文件
            readyUploadFile.delete();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return readyUploadFile.getName();
    }
}
